package com.yueny.study.db.kernel.join.hash;

import com.yueny.study.db.kernel.join.data.PrepareData;
import com.yueny.study.db.kernel.join.data.row.Row;

import java.util.List;
import java.util.Map;

/**
 * @author fengyang
 * @date 2023/10/30 下午3:54
 * @see <a href="yueny09@163.com">mailTo: yueny09@163.com</a>
 */
public interface IHashJoin
{
    /**
     * 数据准备
     */
    PrepareData prepareData();

    /**
     * 分析Table， 确定 build 和 probe
     *
     * @return key:build;   value:  probe
     */
    Map.Entry<List<Row>, List<Row>> assemblyTable(PrepareData prepareData);

    /**
     * 根据 build 表构造Hash表
     */
    Map<Integer /* hash value*/, Row /* row data */> buildHash(List<Row> build);

    /**
     * 进行哈希连接
     */
    List<HasherMatchResult> hasherMatcher(List<Row> probe, final Map<Integer /* hash value*/, Row /* row data */> buildHashTable);

}
